home *** CD-ROM | disk | FTP | other *** search
- % Macros for The TeXbook
-
- \catcode`@=11 % borrow the private macros of PLAIN (with care)
-
- \font\tentex=amtex10
-
- \font\inchhigh=aminch
- \font\titlefont=amssmc40
-
- \font\ninerm=amr9
- \font\eightrm=amr8
- \font\sixrm=amr6
-
- \font\ninei=ammi9
- \font\eighti=ammi8
- \font\sixi=ammi6
- \skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177
-
- \font\ninesy=amsy9
- \font\eightsy=amsy8
- \font\sixsy=amsy6
- \skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60
-
- \font\eightss=amssq8
-
- \font\eightssi=amssqi8
-
- \font\ninebf=ambx9
- \font\eightbf=ambx8
- \font\sixbf=ambx6
-
- \font\ninett=amtt9
- \font\eighttt=amtt8
-
- \hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type
- \hyphenchar\ninett=-1
- \hyphenchar\eighttt=-1
-
- \font\ninesl=amsl9
- \font\eightsl=amsl8
-
- \font\nineit=amti9
- \font\eightit=amti8
-
- \font\tenu=amu10 % unslanted text italic
- \font\magnifiedfiverm=amr5 at 10pt
- \font\manual=manfnt % font used for the METAFONT logo and special symbols
-
- \newskip\ttglue
- \def\tenpoint{\def\rm{\fam0\tenrm}%
- \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
- \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
- \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
- \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
- \def\it{\fam\itfam\tenit}%
- \textfont\itfam=\tenit
- \def\sl{\fam\slfam\tensl}%
- \textfont\slfam=\tensl
- \def\bf{\fam\bffam\tenbf}%
- \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
- \scriptscriptfont\bffam=\fivebf
- \def\tt{\fam\ttfam\tentt}%
- \textfont\ttfam=\tentt
- \tt \ttglue=.5em plus.25em minus.15em
- \normalbaselineskip=12pt
- \let\sc=\eightrm
- \let\big=\tenbig
- \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}%
- \normalbaselines\rm}
-
- \def\ninepoint{\def\rm{\fam0\ninerm}%
- \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
- \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
- \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
- \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
- \def\it{\fam\itfam\nineit}%
- \textfont\itfam=\nineit
- \def\sl{\fam\slfam\ninesl}%
- \textfont\slfam=\ninesl
- \def\bf{\fam\bffam\ninebf}%
- \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
- \scriptscriptfont\bffam=\fivebf
- \def\tt{\fam\ttfam\ninett}%
- \textfont\ttfam=\ninett
- \tt \ttglue=.5em plus.25em minus.15em
- \normalbaselineskip=11pt
- \let\sc=\sevenrm
- \let\big=\ninebig
- \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}%
- \normalbaselines\rm}
-
- \def\eightpoint{\def\rm{\fam0\eightrm}%
- \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
- \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
- \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
- \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
- \def\it{\fam\itfam\eightit}%
- \textfont\itfam=\eightit
- \def\sl{\fam\slfam\eightsl}%
- \textfont\slfam=\eightsl
- \def\bf{\fam\bffam\eightbf}%
- \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
- \scriptscriptfont\bffam=\fivebf
- \def\tt{\fam\ttfam\eighttt}%
- \textfont\ttfam=\eighttt
- \tt \ttglue=.5em plus.25em minus.15em
- \normalbaselineskip=9pt
- \let\sc=\sixrm
- \let\big=\eightbig
- \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}%
- \normalbaselines\rm}
-
- \def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections
- \def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}}
- \def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
- \left#1\vbox to7.25pt{}\right.\n@space$}}}
- \def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
- \left#1\vbox to6.5pt{}\right.\n@space$}}}
-
- % Page layout
- \newdimen\pagewidth \newdimen\pageheight \newdimen\ruleht
- \hsize=29pc \vsize=44pc \maxdepth=2.2pt \parindent=3pc
- \pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt
- \abovedisplayskip=6pt plus 3pt minus 1pt
- \belowdisplayskip=6pt plus 3pt minus 1pt
- \abovedisplayshortskip=0pt plus 3pt
- \belowdisplayshortskip=4pt plus 3pt
-
- %\newinsert\footins
- \def\footnote#1{\edef\@sf{\spacefactor\the\spacefactor}#1\@sf
- \insert\footins\bgroup\eightpoint
- \interlinepenalty100 \let\par=\endgraf
- \leftskip=\z@skip \rightskip=\z@skip
- \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000
- \smallskip\item{#1}\bgroup\strut\aftergroup\@foot\let\next}
- \skip\footins=12pt plus 2pt minus 4pt % space added when footnote is present
- %\count\footins=1000 % footnote magnification factor (1 to 1)
- \dimen\footins=30pc % maximum footnotes per page
-
- \newinsert\margin
- \dimen\margin=\maxdimen
- %\count\margin=0 \skip\margin=0pt % marginal inserts take up no space
-
- \newif\iftitle
- \def\titlepage{\global\titletrue} % for pages without headlines
- \def\rhead{} % \rhead contains the running headline
-
- \def\leftheadline{\hbox to \pagewidth{%
- \vbox to 10pt{}% strut to position the baseline
- \llap{\tenbf\folio\kern1pc}% folio to left of text
- \tenit\rhead\hfil% running head flush left
- }}
- \def\rightheadline{\hbox to \pagewidth{%
- \vbox to 10pt{}% strut to position the baseline
- \hfil\tenit\rhead\/% running head flush right
- \rlap{\kern1pc\tenbf\folio}% folio to right of text
- }}
-
- \def\onepageout#1{\shipout\vbox{ % here we define one page of output
- \offinterlineskip % butt the boxes together
- \vbox to 3pc{ % this part goes on top of the 44pc pages
- \iftitle % the next is used for title pages
- \global\titlefalse % reset the titlepage switch
- \setcornerrules % for camera alignment
- \else\ifodd\pageno \rightheadline\else\leftheadline\fi\fi
- \vfill} % this completes the \vbox to 3pc
- \vbox to \pageheight{
- \ifvoid\margin\else % marginal info is present
- \rlap{\kern31pc\vbox to\z@{\kern4pt\box\margin \vss}}\fi
- #1 % now insert the main information
- \ifvoid\footins\else % footnote info is present
- \vskip\skip\footins \kern-3pt
- \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt
- \unvbox\footins\fi
- \boxmaxdepth=\maxdepth
- } % this completes the \vbox to \pageheight
- }
- \advancepageno}
-
- \def\setcornerrules{\hbox to \pagewidth{\vrule width 1pc height\ruleht
- \hfil \vrule width 1pc}
- \hbox to \pagewidth{\llap{\sevenrm(page \folio)\kern1pc}%
- \vrule height1pc width\ruleht depth\z@
- \hfil \vrule width\ruleht depth\z@}}
-
- \output{\onepageout{\unvbox255}}
-
- \newbox\partialpage
- \def\begindoublecolumns{\begingroup
- \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
- \output={\doublecolumnout} \hsize=14pc \vsize=89pc}
- \def\enddoublecolumns{\output={\balancecolumns}\eject
- \endgroup \pagegoal=\vsize}
-
- \def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
- \dimen@=44pc \advance\dimen@ by-\ht\partialpage
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
- \unvbox255 \penalty\outputpenalty}
- \def\pagesofar{\unvbox\partialpage
- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
- \def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
- \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
- \divide\dimen@ by2 \splittopskip=\topskip
- {\vbadness=10000 \loop \global\setbox3=\copy0
- \global\setbox1=\vsplit3 to\dimen@
- \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
- \setbox0=\vbox to\dimen@{\unvbox1}
- \setbox2=\vbox to\dimen@{\unvbox3}
- \pagesofar}
-
- % Chapter formatting
- % The preface and table of contents are formatted in place, not here
-
- \newcount\exno % for the number of exercises in the current chapter
- \newcount\subsecno % for the number of subsections in the current chapter
-
- \outer\def\beginchapter#1 #2#3. #4\par{\global\exno=0
- \subsecno=0
- \def\chapno{#2#3}
- \ifodd\pageno
- \errmessage{You had too much text on that last page; I'm backing up}
- \advance\pageno by-1 \fi
- \titlepage
- \def\\{ } % \\'s in the title will be treated as spaces
- \message{#1 #2#3:} % show the chapter title on the terminal
- \xdef\rhead{#1 #2#3: #4\unskip}
- {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X}
- \def\\{#3}
- \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em}
- \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi
- \vskip 1.75pc
- \baselineskip 36pt \lineskiplimit 1pt \lineskip 12pt
- \let\\=\cr % now the \\'s are line dividers
- \halign{\line{\titlefont\hfil##}\\#4\unskip\\}
- \vfill\eject} % output the chapter title page
- \tenpoint
- \noindent\ignorespaces} % the first paragraph of a chapter is not indented
-
- \outer\def\endchapter{\ifodd\pageno \else\vfill\eject\null\fi
- \begingroup\bigskip\vfill % beginning of the quotes
- \def\eject{\endgroup\eject}
- \def\par{\ifhmode\/\endgraf\fi}\obeylines
- \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
- \eightpoint \let\tt=\ninett
- \baselineskip 10pt
- \parfillskip \z@
- \interlinepenalty 10000
- \leftskip \z@ plus 40pc minus \parindent
- \let\rm=\eightss \let\sl=\eightssi
- \everypar{\sl}}
- \def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)}
-
- \def\dbend{{\manual\char127}} % dangerous bend sign
- \def\d@nger{\medbreak\begingroup\clubpenalty=10000
- \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
- \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ninepoint}
- \outer\def\danger{\d@nger}
- \def\dd@nger{\medbreak\begingroup\clubpenalty=10000
- \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2
- \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}\ninepoint}
- \outer\def\ddanger{\dd@nger}
- \def\enddanger{\endgraf\endgroup} % omits the \medbreak
-
- \outer\def\subsection#1. {\medbreak\advance\subsecno by 1
- \noindent{\it \the\subsecno.\enspace#1.\enspace}}
- \def\ansno#1.#2:{\medbreak\noindent
- \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
-
- % Composition macros
- \hyphenation{man-u-script man-u-scripts ap-pen-dix}
-
- \def\MF{{\manual META}\-{\manual FONT}}
- \def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em
- S$-\TeX}
- \def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
- \def\SS{{\it SS}} % scriptscript style
- \def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line
- \def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow
- \def\up{\leavevmode\hbox{\tt\char'13}} % upward arrow
- \def\]{\leavevmode\hbox{\tt\char`\ }} % visible space
-
- \def\pt{\,{\rm pt}} % units of points, in math formulas
- \def\em{\,{\rm em}} % units of ems, in math formulas
- \def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity
- \def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
- \def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
- \def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt
- \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}
- \kern1pt\hrule}\vrule}\thinspace} % control sequence token
-
- {\obeyspaces\gdef {\ }}
- \def\parbreak{\hfil\break\indent\strut}
- \def\stretch{\nobreak\hskip0pt plus2pt\relax}
-
- % macros for non-centered displays
- \outer\def\begindisplay{\obeylines\startdisplay}
- {\obeylines\gdef\startdisplay#1
- {\catcode`\^^M=5$$#1\halign\bgroup\indent##\hfil&&\qquad##\hfil\cr}}
- \outer\def\enddisplay{\crcr\egroup$$}
-
- % (the following \begin...\end-type macros do not appear in Appendix E)
- % macros for demonstrating math constructions
- \outer\def\beginmathdemo{$$\advance\baselineskip by2pt
- \halign\bgroup\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
- \outer\def\begindisplaymathdemo {$$\advance\baselineskip by15pt
- \halign\bgroup\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr
- \noalign{\vskip-15pt}}
- \outer\def\beginlongmathdemo{$$\advance\baselineskip by2pt
- \halign\bgroup\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
- \outer\def\beginlongdisplaymathdemo {$$\advance\baselineskip by15pt
- \halign\bgroup\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr
- \noalign{\vskip-15pt}}
- \outer\def\endmathdemo{\egroup$$}
-
- % macros for font tables
- \def\oddline#1{\cr
- \noalign{\nointerlineskip}
- \multispan{19}\hrulefill&
- \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr
- \noalign{\nointerlineskip}}
- \def\evenline{\cr\noalign{\hrule}}
- \def\chartstrut{\lower4.5pt\vbox to14pt{}}
- \def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=0 #1
- \halign to\hsize\bgroup
- \chartstrut##\tabskip0pt plus10pt&
- &\hfil##\hfil&\vrule##\cr
- \lower6.5pt\null
- &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
- \def\endchart{\raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
- &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$}
- \def\:{\setbox0=\hbox{\char\count@}%
- \ifdim\ht0>7.5pt\reposition
- \else\ifdim\dp0>2.5pt\reposition\fi\fi
- \box0\global\advance\count@ by1 }
- \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}
- \def\normalchart{%
- &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0
- &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1
- &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2
- &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3
- &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4
- &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5
- &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6
- &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
- &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7
- &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline}
-
- % (now Appendix E resumes again)
- % macros for verbatim scanning
- \chardef\other=12
- \def\ttverbatim{\begingroup
- \catcode`\\=\other
- \catcode`\{=\other
- \catcode`\}=\other
- \catcode`\$=\other
- \catcode`\&=\other
- \catcode`\#=\other
- \catcode`\%=\other
- \catcode`\~=\other
- \catcode`\_=\other
- \catcode`\^=\other
- \obeyspaces \obeylines \tt}
-
- \outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
- \catcode`\|=0 \rightskip-5pc \ttfinish}
- {\catcode`\|=0 |catcode`|\=\other % | is temporary escape character
- |obeylines % end of line is active
- |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}}
-
- \catcode`\|=\active
- {\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
-
- % macros for syntax rules (again, not in Appendix E)
- \def\[#1]{\silenttrue\xref|#1|\thinspace{\tt#1}\thinspace} % keyword in syntax
- \def\beginsyntax{\endgraf\nobreak\medskip
- \begingroup \catcode`<=13 \catcode`[=13
- \let\par=\endsyntaxline \obeylines}
- \def\endsyntaxline{\futurelet\next\syntaxswitch}
- \def\syntaxswitch{\ifx\next\<\let\next=\syntaxrule
- \else\ifx\next\endsyntax\let\next=\endgroup
- \else\let\next=\continuerule\fi\fi \next}
- \def\continuerule{\hfil\break\indent\qquad}
- \def\endsyntax{\medbreak\noindent}
- {\catcode`<=13 \catcode`[=13
- \global\let<=\< \global\let[=\[
- \gdef\syntaxrule<#1>{\endgraf\indent\silentfalse\xref\<#1>}}
- \def\is{\ $\longrightarrow$ }
- \def\alt{\ $\vert$ }
-
- % macros to demarcate lines quoted from TeX source files
- \def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines
- \hrule\kern1pt\nobreak \everypar{\strut}}
- \def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent}
- \def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent}
-
- \outer\def\exercise{\medbreak
- \global\advance\exno by 1
- \noindent\llap{\manual\char'170\rm\kern.15em}% triangle in margin
- {\ninebf EXERCISE \bf\chapno.\the\exno}\par\nobreak\noindent}
- \def\dexercise{\global\advance\exno by 1
- \llap{\manual\char'170\rm\kern.15em}% triangle in indented space
- {\eightbf EXERCISE \bf\chapno.\the\exno}\hfil\break}
- \outer\def\dangerexercise{\d@nger \dexercise}
- \outer\def\ddangerexercise{\dd@nger \dexercise}
-
- \newwrite\ans
- \immediate\openout\ans=answers % file for answers to exercises
- \outer\def\answer{\par\medbreak
- \immediate\write\ans{}
- \immediate\write\ans{\string\ansno\chapno.\the\exno:}
- \copytoblankline}
- \def\copytoblankline{\begingroup\setupcopy\copyans}
- \def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
- \catcode`\|=\other \obeylines}
- {\obeylines \gdef\copyans#1
- {\def\next{#1}%
- \ifx\next\empty\let\next=\endgroup %
- \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}}
-
- % Editorial notes: some things to watch for.
-
- % f |\ and f ^|\ => insert \/ [e.g., if\/ |\hbox|...]
- % appendi => check for \null [e.g., Appendix~B\null.]
- % ly- => the hyphen is probably omittable
- % ''. and '', => transpose to .'' and ,''
-
- % Macros for drawing figures (not in Appendix E)
- \def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 }
- \def\hidevrule#1#2{\kern-#1{\dimen0=#1
- \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
- % \makeblankbox puts rules at the edges of a blank box
- % whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp)
- % #1 is rule thickness outside, #2 is rule thickness inside
- \def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
- \kern-#1% overlap the rules at the corners
- \hbox to\wd0{\hidevrule{#1}{#2}%
- \raise\ht0\vbox to #1{}% set the vrule height
- \lower\dp0\vtop to #1{}% set the vrule depth
- \hfil\hidevrule{#2}{#1}}%
- \kern-#1\hidehrule{#2}{#1}}}}
- \def\maketypebox{\makeblankbox{0pt}{1pt}}
- \def\makelightbox{\makeblankbox{.2pt}{.2pt}}
-
- % \box\bigdot is a null box with a bullet at its reference point
- \newbox\bigdot \newbox\smalldot
- \setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height
- \setbox1=\hbox to\z@{$\hss\bullet\hss$} % bullet is centered on the axis
- \setbox\bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
- \setbox1=\hbox to\z@{$\hss\cdot\hss$} % cdot is centered on the axis
- \setbox\smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss}
-
- % \arrows makes things like <--- text --->
- \def\arrows#1#2{% #1=width, #2=text
- {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$}
- \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$%
- \cleaders\copy0\hfil
- \kern.4em #2\kern.4em
- \cleaders\copy0\hfil
- $\mkern-6mu\rightarrow$\kern-.055556em}}}
-
- % \samplebox makes the outline of a box, with big dot at reference point
- \def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text
- {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
- \nointerlineskip
- \vbox to #2{}}% now \box0 has the desired ht, dp, and wd
- \hbox{\copy\bigdot
- \vrule height.2pt depth.2pt width#3%
- \kern-#3%
- \makelightbox
- \kern-#3%
- \raise#1\vbox{\hbox to #3{\hss#4\hss}
- \kern 3pt}}}}
-
- % \sampleglue makes glue between sample boxes
- \newdimen\varunit
- \varunit=\hsize \advance\varunit by-2\parindent
- \divide\varunit by 58 % illustrations in Chapter 12
- \def\sampleglue#1#2{% #1=width, #2=text
- \vtop{\hbox to #1{\xleaders\hbox to .5\varunit{\hss\copy\smalldot\hss}\hfil}
- \kern3pt
- \tabskip \z@ plus 1fil
- \halign to #1{\hfil##\cr#2\cr}}}
-
- % Indexing macros
- \newif\ifproofmode
- \proofmodetrue % this should be false when making camera-ready copy
- \newwrite\inx
- \immediate\openout\inx=index % file for index reminders
- \newif\ifsilent
- \def\specialhat{\ifmmode\def\next{^}\else\let\next=\beginxref\fi\next}
- \def\beginxref{\futurelet\next\beginxrefswitch}
- \def\beginxrefswitch{\ifx\next\specialhat\let\next=\silentxref
- \else\silentfalse\let\next=\xref\fi \next}
- \catcode`\^=\active \let ^=\specialhat
- \def\silentxref^{\silenttrue\xref}
-
- \def\marginstyle{\vrule height6pt depth2pt width\z@ \sevenrm}
-
- \chardef\bslash=`\\
- \def\xref{\futurelet\next\xrefswitch}
- \def\xrefswitch{\begingroup
- \ifx\next|\aftergroup\vxref % case 1 or 2, |arg| or |\arg|
- \else\ifx\next\<\aftergroup\anglexref % case 3, "\<arg>" means angle brackets
- \else\aftergroup\normalxref \fi\fi\endgroup} % case 0, "{arg}"
- \def\vxref|{\catcode`\\=\active \futurelet\next\vxrefswitch}
- \def\vxrefswitch#1|{\catcode`\\=0
- \ifx\next\empty\def\xreftype{2}%
- \def\next{{\tt\bslash\text}}% type 2, |\arg|
- \else\def\xreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg|
- \edef\text{#1}\makexref}
- {\catcode`\|=0 \catcode`\\=\active |gdef\{}}
- \def\anglexref\<#1>{\def\xreftype{3}\def\text{#1}%
- \def\next{\<\text>}\makexref}
- \def\normalxref#1{\def\xreftype{0}\def\text{#1}\let\next=\text\makexref}
- \def\makexref{\ifproofmode\insert\margin{\hbox{\marginstyle\text}}%
- \xdef\writeit{\write\inx{\text\space!\xreftype\space
- \noexpand\number\pageno.}}\writeit
- \else\ifhmode\kern\z@\fi\fi
- \ifsilent\ignorespaces\else\next\fi}
- % the \insert (which is done in proofmode only) suppresses hyphenation,
- % so the \kern\z@ is put in to give the same effect in non-proofmode.
-
- % Internal cross references that may change
- \def\sesame{61} % page number for Sesame Street quote
- \def\bmiexno{20} % exercise number for bold math italic
- \def\punishexno{1} % exercise number for `punishment'
- \def\vshippage{31} % error message from `\vship'
- \def\storypage{24} % listing of story.tex
-
- \def\checkequals#1#2{\ifnum#1=#2\else
- \errmessage{Redefine \string#1 to be \the#2}\fi}
-